home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Programming / A68k / A68kdef.h < prev    next >
C/C++ Source or Header  |  1991-04-16  |  8KB  |  246 lines

  1. /*------------------------------------------------------------------*/
  2. /*                                    */
  3. /*              MC68000 Cross Assembler                */
  4. /*                                    */
  5. /*             Copyright 1985 by Brian R. Anderson            */
  6. /*                                    */
  7. /*               #define statements - April 16, 1991            */
  8. /*                                    */
  9. /*   This program may be copied for personal, non-commercial use    */
  10. /*   only, provided that the above copyright notice is included        */
  11. /*   on all copies of the source code.  Copying for any other use   */
  12. /*   without the consent of the author is prohibited.            */
  13. /*                                    */
  14. /*------------------------------------------------------------------*/
  15. /*                                    */
  16. /*        Originally published (in Modula-2) in            */
  17. /*        Dr. Dobb's Journal, April, May, and June 1986.          */
  18. /*                                    */
  19. /*     AmigaDOS conversion copyright 1991 by Charlie Gibbs.        */
  20. /*                                    */
  21. /*------------------------------------------------------------------*/
  22.  
  23. #include <stdio.h>
  24. #include <ctype.h>
  25. #include "protos.h"
  26.  
  27. #ifdef __SASC
  28. #include <stdlib.h>
  29. #include <stddef.h>
  30. #include <string.h>
  31. #include <fcntl.h>
  32. #else
  33. extern char *malloc();
  34. extern int  open(), creat(), read(), write(), close(), unlink();
  35. extern long lseek();
  36. #endif
  37.  
  38. #ifndef TRUE
  39. #define TRUE  1
  40. #define FALSE 0
  41. #endif
  42.  
  43. #define NODEF 32767    /* High line number for undefined symbols */
  44.  
  45. /* Assembler configuration parameters */
  46. #define MAXLINE   128    /* Longest source line */
  47. #define MAXFN     41    /* Maximum length of file name */
  48. #define MAXSREC   16    /* Maximum S-record data length */
  49. #define MAXREF    4    /* Number of line numbers in reference entry */
  50. #define DEFHASH   2047    /* Default number of elements in hash table */
  51. #define DEFHEAP2  1024    /* Default size for secondary heap */
  52. #define INCSKSIZ  2048    /* Size of INCLUDE skip table */
  53. #ifdef MSDOS
  54. #define CHUNKSIZE 2048    /* Memory chunks for Itty Bitty Memories */
  55. #else
  56. #define CHUNKSIZE 8192    /* Size of memory chunks allocated for tables */
  57. #endif
  58. #define FWDSIZE   1024    /* Size of forward branch optimization log */
  59. #define BUFFSIZE  2048    /* File buffer size */
  60. #define ObjMAX    32    /* Max. hex object code digits in listing */
  61.  
  62. /* Hunk number definitions */
  63. #define HunkNone 0    /* Not in a hunk */
  64. #define HunkUnit 999
  65. #define HunkName 1000
  66. #define HunkCode 1001
  67. #define HunkData 1002
  68. #define HunkBSS  1003
  69. #define HunkR32  1004
  70. #define HunkR16  1005
  71. #define HunkR8   1006
  72. #define HunkExt  1007
  73. #define HunkSym  1008
  74. #define HunkDbg  1009
  75. #define HunkEnd  1010
  76.  
  77. #define MEMF_FAST 0x80000000L    /* Hunk must load in FAST memory. */
  78. #define MEMF_CHIP 0x40000000L    /* Hunk must load in CHIP memory. */
  79.  
  80. /* Hunk numbers denoting special symbol attributes */
  81. #define ABSHUNK 32767    /* Absolute */
  82.  
  83. /* Addressing mode flag values */
  84. #define DReg   1    /* Data Register */
  85. #define ARDir  2    /* Address Register Direct */
  86. #define ARInd  3    /* Address Register Indirect */
  87. #define ARPost 4    /* Address Register with Post-Increment */
  88. #define ARPre  5    /* Address Register with Pre-Decrement */
  89. #define ARDisp 6    /* Address Register with Displacement */
  90. #define ARDisX 7    /* Address Register with Disp. & Index */
  91. #define AbsW   8    /* Absolute Short (16-bit Address) */
  92. #define AbsL   9    /* Absolute Long (32-bit Address) */
  93. #define PCDisp 10    /* Program Counter Relative, with Displacement */
  94. #define PCDisX 11    /* Program Counter Relative, with Disp. & Index */
  95. #define Imm    12    /* Immediate */
  96. #define MultiM 13    /* Multiple Register Move */
  97. #define SR     14    /* Status Register */
  98. #define CCR    15    /* Condition Code Register */
  99. #define USP    16    /* User's Stack Pointer */
  100. #define Null   0    /* Error Condition, or Operand missing */
  101.  
  102. #define X0   0    /* Register types */
  103. #define Dreg 1
  104. #define Areg 2
  105.  
  106. #define S0   0    /* Size types */
  107. #define Byte 1
  108. #define Word 2
  109. #define Long 4
  110.  
  111. #define CMPM  0xB108
  112. #define JMP   0x4EC0
  113. #define JSR   0x4E80
  114. #define LEA   0x41C0
  115. #define LINK  0x4E50
  116. #define NOP   0x4E71
  117. #define PEA   0x4840
  118. #define STOP  0x4E72
  119. #define SWAP  0x4840
  120. #define UNLK  0x4E58
  121.  
  122. #define None     0    /* Assembler directives */
  123. #define Org     1
  124. #define DC     2
  125. #define DS     3
  126. #define Even     4
  127. #define End     5
  128. #define Cnop     6
  129. #define Section     7
  130. #define CSeg     8
  131. #define DSeg     9
  132. #define BSS    10
  133. #define Idnt    11
  134. #define DCB    12
  135. #define Near    13
  136. #define Far    14
  137. #define BadMac    15
  138. #define Incbin  16
  139. #define SkipDir    17    /* Skippable INCLUDE directives start here. */
  140. #define Equ    17
  141. #define Public    18
  142. #define Xdef    19
  143. #define Xref    20
  144. #define Page    21
  145. #define DoList    22
  146. #define NoList    23
  147. #define Space    24
  148. #define Title    25
  149. #define Include    26
  150. #define Set    27
  151. #define Macro    28
  152. #define IfEQ    29
  153. #define IfNE    30
  154. #define IfGT    31
  155. #define IfGE    32
  156. #define IfLT    33
  157. #define IfLE    34
  158. #define IfC    35
  159. #define IfNC    36
  160. #define IfD    37
  161. #define IfND    38
  162. #define EndC    39
  163. #define Equr    40
  164. #define Reg    41
  165. #define MacCall    42
  166.  
  167. /* BITSETs of the modes MISSING from effective address modes  */
  168. #define  ea 0x0000    /* Effective addressing - all modes */
  169. #define dea 0x0002    /* Data effective addressing        */
  170. #define mea 0x0003    /* Memory effective addressing      */
  171. #define cea 0x081B    /* Control effective addressing     */
  172. #define aea 0x0E00    /* Alterable effective addressing   */
  173. #define xxx 0xE000    /* extra modes: CCR/SR/USP          */
  174.  
  175. #define IN &        /* Simulated BITSET test */
  176.  
  177. /* AdrModeA bit definitions */
  178. #define RegMem3    0x0001    /* 0 = register, 1 = memory */
  179. #define Ry02    0x0002    /* Register Rx - bits 0-2 */
  180. #define Rx911    0x0004    /* Register Ry - bits 9-11 */
  181. #define Data911    0x0008    /* Immediate data - bits 9-11 */
  182. #define CntR911    0x0010    /* Count register or immediate data */
  183. #define Brnch    0x0020    /* Relative branch */
  184. #define DecBr    0x0040    /* Decrement and branch */
  185. #define Data03    0x0080    /* TRAP vector in 0-3 */
  186. #define Data07    0x0100    /* Data in 0-7 (MOVEQ) */
  187. #define OpM68D    0x0200    /* Data register in 6-8 */
  188. #define OpM68A    0x0400    /* Address register in 6-8 (ADDA/CMPA/SUBA) */
  189. #define OpM68C    0x0800    /* CMP (Compare) */
  190. #define OpM68X    0x1000    /* EOR (Exclusive or) */
  191. #define OpM68S    0x2000    /* EXT (Sign extension) */
  192. #define OpM68R    0x4000    /* MOVEP (Register/memory) */
  193. #define OpM37    0x8000    /* EXG (Exchange registers) */
  194. #define TwoOpsA    0xDF4D    /* Two operands are required. */
  195.  
  196. /* AdrModeB bit definitions */
  197. #define Bit811    0x0001    /* Bit operations - bits 8-11 as switch */
  198. #define Size67    0x0002    /* 00 = byte, 01 = word, 10 = long */
  199. #define Size6    0x0004    /* 0 = word, 1 = long */
  200. #define Sz1213A    0x0008    /* 01 = byte, 11 = word, 10 = long */
  201. #define Sz1213    0x0010    /* 11 = word, 10 = long */
  202. #define Exten    0x0020    /* Opcode extension is required. */
  203. #define EA05a    0x0040    /* Effective address - all */
  204. #define EA05b    0x0080    /* All except ARDir */
  205. #define EA05c    0x0100    /* All except ARDIR and Imm */
  206. #define EA05d    0x0200    /* All except PCDisp, PCDisx, and Imm */
  207. #define EA05e    0x0400    /* All except ARDir, PCDisp, PCDisx, and Imm */
  208. #define EA05f    0x0800    /* All except Dreg, ARDir, ARPost, ARPre, Imm */
  209. #define EA05x    0x1000    /* Dual mode - AND/OR */
  210. #define EA05y    0x2000    /* Dual mode - ADD/SUB */
  211. #define EA05z    0x4000    /* Dual mode - MOVEM */
  212. #define EA611    0x8000    /* Eff. Adr. in 6-11 (used only by MOVE) */
  213. #define TwoOpsB    0xF3DD    /* Two operands are required. */
  214. #define ImmMode    0x0422    /* Immediate instructions */
  215. #define SrcPC    0xF8C0    /* Source operand may be PCDisp. */
  216.  
  217. #define Dummy     0    /* Error codes */
  218. #define AlignErr  1
  219. #define NoCode    2
  220. #define SymDup    3
  221. #define Undef     4
  222. #define ModeErr   5
  223. #define OperErr   6
  224. #define BraErr    7
  225. #define AddrErr   8
  226. #define SizeErr   9
  227. #define EndErr   10
  228. #define AbsReq   11
  229. #define RelErr   12
  230. #define NoIncl   13
  231. #define FwdRef   14
  232. #define NotSFmt  15
  233. #define NeedLab  16
  234. #define Phase    17
  235. #define NoENDM   18
  236. #define NoENDC   19
  237. #define ManyENDC 20
  238. #define DCOflo   21
  239. #define ManySect 22
  240. #define DupMac   23
  241. #define MultLab  24
  242. #define NoStrEnd 25
  243. #define BccSDsp0 26
  244.  
  245. #define ERRMAX 10    /* Size of error message table */
  246.